unit UnitMainForm; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
  DBGrids, LR_Class, LR_DBSet, sqlite3conn, sqldb, db;

type

  { TMainForm }

  TMainForm = class(TForm)
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;
    frDBDataSet1: TfrDBDataSet;
    frReport1: TfrReport;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem10: TMenuItem;
    MenuItem11: TMenuItem;
    MenuItem12: TMenuItem;
    MenuItem13: TMenuItem;
    MenuItem14: TMenuItem;
    MenuItem15: TMenuItem;
    MenuItem16: TMenuItem;
    MenuItem17: TMenuItem;
    MenuItem18: TMenuItem;
    MenuItem19: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem20: TMenuItem;
    MenuItem21: TMenuItem;
    MenuItem22: TMenuItem;
    MenuItem23: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    MenuItem9: TMenuItem;
    SaveDialog1: TSaveDialog;
    SQLite3Connection1: TSQLite3Connection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure DBGrid1CellClick(Column: TColumn);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure FormShow();
    procedure MenuItem10Click(Sender: TObject);
    procedure MenuItem13Click(Sender: TObject);
    procedure MenuItem14Click(Sender: TObject);
    procedure MenuItem15Click(Sender: TObject);
    procedure MenuItem16Click(Sender: TObject);
    procedure MenuItem17Click(Sender: TObject);
    procedure MenuItem18Click(Sender: TObject);
    procedure MenuItem19Click(Sender: TObject);
    procedure MenuItem20Click(Sender: TObject);
    procedure MenuItem22Click(Sender: TObject);
    procedure MenuItem23Click(Sender: TObject);
    procedure MenuItem2Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
    procedure MenuItem6Click(Sender: TObject);
    procedure MenuItem7Click(Sender: TObject);
    procedure MenuItem9Click(Sender: TObject);
    procedure ordenar_grid();
  private
    { private declarations }
  public
    fecha_desde : string;
    fecha_hasta : string;
    paciente : string;
    obra_social : string;
    medico_solicitante : string;
    medico_ejecutor : string;
  end; 

var
  MainForm: TMainForm;

implementation

uses
  UnitFormPreinformes, UnitMedicos, UnitObrasSociales,UnitPacientes, UnitNuevoInforme, UnitBusquedaFecha,
  UnitAcercaDe;

{$R *.lfm}

{ TMainForm }

procedure TMainForm.ordenar_grid();
begin
  if SQLQuery1.Active = true then
    SQLQuery1.Close;

  SQLQuery1.SQL.Text := 'select * from vw_informe where est_fecha >= ''' + fecha_desde + ''' and est_fecha <= '''
    + fecha_hasta + ''' and pte_nombre like ''%' + paciente + '%'' and mds_nombre like ''%' + medico_solicitante
    + '%'' and mde_nombre like ''%' + medico_ejecutor + '%'' and obs_nombre like ''%' + obra_social
    + '%'' order by est_fecha';

  SQLQuery1.Open;

  DBGrid1.Columns[1].Title.Caption := 'Fecha';
  DBGrid1.Columns[3].Title.Caption := 'Paciente';
  DBGrid1.Columns[6].Title.Caption := 'Obra Social';
  DBGrid1.Columns[8].Title.Caption := 'Médico Solicitante';
  DBGrid1.Columns[11].Title.Caption := 'Médico Ejecutor';
  DBGrid1.Columns[13].Title.Caption := 'Estudio';

  DBGrid1.Columns[1].Width := 80;
  DBGrid1.Columns[3].Width := 160;
  DBGrid1.Columns[6].Width := 100;
  DBGrid1.Columns[8].Width := 160;
  DBGrid1.Columns[11].Width := 160;
  DBGrid1.Columns[13].Width := 270;

  DBGrid1.Columns[0].Visible:= false;
  DBGrid1.Columns[2].Visible:= false;
  DBGrid1.Columns[4].Visible:= false;
  DBGrid1.Columns[5].Visible:= false;
  DBGrid1.Columns[7].Visible:= false;
  DBGrid1.Columns[9].Visible:= false;
  DBGrid1.Columns[10].Visible:= false;
  DBGrid1.Columns[12].Visible:= false;
  DBGrid1.Columns[14].Visible:= false;

end;

procedure TMainForm.MenuItem2Click(Sender: TObject);
begin
  Close();
end;

procedure TMainForm.MenuItem4Click(Sender: TObject);
begin
  FormMedicos.ShowModal;
end;

procedure TMainForm.MenuItem5Click(Sender: TObject);
begin
  FormPacientes.ShowModal;
end;

procedure TMainForm.MenuItem6Click(Sender: TObject);
begin
  FormObrasSociales.ShowModal;
end;

procedure TMainForm.MenuItem7Click(Sender: TObject);
begin
  FormPreinformes.ShowModal;
end;

procedure TMainForm.MenuItem9Click(Sender: TObject);
begin
  FormNuevoInforme.Label8.Caption := '';
  FormNuevoInforme.Edit1.Text := '';
  FormNuevoInforme.Edit2.Text := '';
  FormNuevoInforme.Edit3.Text := '';
  FormNuevoInforme.Edit4.Text := '';
  FormNuevoInforme.Edit6.Text := 'NINGUNA';
  FormNuevoInforme.obsoc_cdg := '0';
  FormNuevoInforme.Edit5.Text := DateToStr(Date);
  FormNuevoInforme.Memo1.Clear;
  FormNuevoInforme.Caption := 'Nuevo Informe';
  FormNuevoInforme.Label8.Caption := '';

  FormNuevoInforme.ShowModal;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  SQLite3Connection1.Connected := true;
end;

procedure TMainForm.DBGrid1CellClick(Column: TColumn);
begin
  FormNuevoInforme.pte_cdg := SQLQuery1.FieldByName('pte_cdg').AsString;
  FormNuevoInforme.pte_dni := SQLQuery1.FieldByName('pte_dni').AsString;
  FormNuevoInforme.medsol_cdg := SQLQuery1.FieldByName('mds_cdg').AsString;
  FormNuevoInforme.medsol_matricula := SQLQuery1.FieldByName('mds_matricula').AsString;
  FormNuevoInforme.medej_cdg := SQLQuery1.FieldByName('mde_cdg').AsString;
  FormNuevoInforme.medej_matricula := SQLQuery1.FieldByName('mde_matricula').AsString;
  FormNuevoInforme.obsoc_cdg := SQLQuery1.FieldByName('obs_cdg').AsString;
  FormNuevoInforme.Caption := 'Editar Informe';
  FormNuevoInforme.Label8.Caption := SQLQuery1.FieldByName('est_cdg').AsString;
  FormNuevoInforme.Edit5.Text := SQLQuery1.FieldByName('est_fecha').AsString;
  FormNuevoInforme.Edit1.Text := SQLQuery1.FieldByName('pte_nombre').AsString;
  FormNuevoInforme.Edit6.Text := SQLQuery1.FieldByName('obs_nombre').AsString;
  FormNuevoInforme.Edit2.Text := SQLQuery1.FieldByName('mds_nombre').AsString;
  FormNuevoInforme.Edit3.Text := SQLQuery1.FieldByName('mde_nombre').AsString;
  FormNuevoInforme.Edit4.Text := SQLQuery1.FieldByName('est_titulo').AsString;
  FormNuevoInforme.Memo1.Text := SQLQuery1.FieldByName('est_texto').AsString;

  FormNuevoInforme.ShowModal;
end;

procedure TMainForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  SQLQuery1.Close;
  SQLite3Connection1.Close;
end;

procedure TMainForm.FormShow();
begin
  fecha_desde := FormatDateTime('yyyy-mm-dd', date);
  fecha_hasta := FormatDateTime('yyyy-mm-dd', date);
  paciente := '%';
  medico_solicitante := '%';
  medico_ejecutor := '%';
  obra_social := '%';

  ordenar_grid();
end;

procedure TMainForm.MenuItem10Click(Sender: TObject);
begin
  ShowMessage('Click en el informe a modificar');
end;

procedure TMainForm.MenuItem13Click(Sender: TObject);
begin
  paciente := InputBox('Filtro por Paciente', 'Ingrese parte del nombre del paciente:', '');

  if paciente <> '' then
    ordenar_grid()
  else
    FormShow();
end;

procedure TMainForm.MenuItem14Click(Sender: TObject);
begin
  medico_solicitante := InputBox('Filtro por Medico Solicitante',
    'Ingrese parte de nombre del medico solicitante:', '');

  if medico_solicitante <> '' then
    ordenar_grid()
  else
    FormShow();
end;

procedure TMainForm.MenuItem15Click(Sender: TObject);
begin
  FormBusquedaFecha.ShowModal;

  fecha_desde := FormBusquedaFecha.fecha_desde;
  fecha_hasta := FormBusquedaFecha.fecha_hasta;

  ordenar_grid();
end;

procedure TMainForm.MenuItem16Click(Sender: TObject);
begin
  medico_ejecutor := InputBox('Filtro por Medico Ejecutore',
    'Ingrese parte de nombre del medico ejecutor:', '');

  if medico_ejecutor <> '' then
    ordenar_grid()
  else
    FormShow();
end;

procedure TMainForm.MenuItem17Click(Sender: TObject);
begin
  FormShow();
end;

procedure TMainForm.MenuItem18Click(Sender: TObject);
begin
  obra_social := InputBox('Filtro por Obra Social', 'Ingrese parte del nombre de la Obra Social:', '');

  if obra_social <> '' then
    ordenar_grid()
  else
    FormShow();
end;

procedure TMainForm.MenuItem19Click(Sender: TObject);
begin
  frReport1.DesignReport;
end;

procedure TMainForm.MenuItem20Click(Sender: TObject);
begin
  frReport1.LoadFromFile('listado_practicas.lrf');
  frReport1.ShowReport;
end;

procedure TMainForm.MenuItem22Click(Sender: TObject);
begin
  FormAcercaDe.ShowModal;
end;

procedure TMainForm.MenuItem23Click(Sender: TObject);
begin
  SQLite3Connection1.Close;
  SaveDialog1.InitialDir := GetCurrentDir;
  SaveDialog1.Filter := 'SQLite3 file|*.db3';
  SaveDialog1.DefaultExt := 'db3';
  SaveDialog1.FileName := 'sim_bkp_' + FormatDateTime('ddmmYYYY', date) + '.db3';
  SaveDialog1.Execute;
  CopyFile(PChar('sim.db3'),PChar(SaveDialog1.FileName),TRUE);
  ShowMessage('Respaldo de datos realizado con exito');
  Close;
end;

end.

